import java.io.File;
import java.util.Scanner;

public class IODemoScanFile {
    private static Scanner scanner = new Scanner(System.in);
    // 程序实例1
    public static void main(String[] args) {
        // 让用户指定要搜索的目录
       // Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要搜索的路径: ");
        String basePath = scanner.next();

        // 针对用户的输入 进行一个简单的判定
        File root = new File(basePath);
        // 先判断当前是不是一个目录
        if(!root.isDirectory()){
            // 这里面表示 路径不存在, 或者只是一个普通文件,此时无法进行搜索.
            System.out.println("当前输入的目录有误");
            return;
        }

        // 再让用户输入一个要删除的文件名字
        System.out.println("请输入一个要删除的文件名: ");
        String nameToDelete = scanner.next(); // 此处应该用 next(表示一个空白符就读完了) 来读取字符串, 而不能用 nextLine(专门去找换行符)

        // 需要针对指定针对的路径进行扫描
        // 要用递归操作
        // 先从根目录出发.(root) 先判定一下在当前的这个目录里是否包含要删除的文件 (是, 就删除, 否则就跳过 )
        // 如果当前这里包含了一些目录, 再针对子目录进行递归操作

        scnDir(root, nameToDelete);
    }
    private static void scnDir(File root, String nameToDelete){

        System.out.println("[scanDir] "+ root.getAbsolutePath()); // 查看当前搜索过程
        // 1. 先列出当前路径下包含的内容
        File[] files = root.listFiles(); //(这个操作是相当于是看一下,当前这个目录里面有什么. 好比, 文件资源管理器,双击打开了一个目录一样).
        // 文件资源管理器中显示的结果呢 就相当于 listFiles 得到的内容, 使用 File 对象来表示列出的结果, 因为结果有多个,所以用数组表示
        // list方法也有类似功效, 只是list 只是得到String 类型的文件名

        //先判断 files
        if(files == null){
            // 如果当前的根目录下没有东西, 是一个空目录
            // 那就结束递归
            return;
        }

        // 2. 遍历当前列出的结果
        for (File f: files) {
            if(f.isDirectory()){
                // 如果是目录就进一步递归
                scnDir(f,nameToDelete); // 再把当前的子目录进行进行递归(此处是一个经典面试题 (递归遍历目录的操作))
            }else{
                // 如果是普通文件, 则判定是否要删除
                if(f.getName().contains(nameToDelete)){ // 判断 当前文件是否包含要删除的目录
                    System.out.println("确认是否要删除 "+f.getAbsolutePath() + " 吗?");
                  String choice =  scanner.next();
                  if(choice.equals("y") || choice.equals("Y")) {
                      f.delete();
                      System.out.println("删除成功");
                  }else{
                      System.out.println("删除取消!");
                  }
                }
            }
        }
    }
}
